跳到主要内容

使用 acme.sh 自动续签阿里云 SSL 证书

个人免费证书只能用90天,所以每90天需要更换一次,要么手动,要么自动:

1. 在服务器上安装 acme.sh

curl https://get.acme.sh | sh -s email=my@example.com
  • acme.sh会自动安装在登录用户的根目录~下,比如/root/.acme.sh
  • 安装时,会自动在.bashrc中添加alias,这样就可以在全局任何地方使用 acme.sh命令;
  • 安装后,会自动创建 cronjob, 每天 0:00 点自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书。

注意:如果安装完成后提示 -bash: acme.sh: command not found,需要手动执行 source ~/.bashrc

2. DNS 验证方式生成证书

  • 阿里云的RAM访问控制台,生成RAM级的Ali_KeyAli_Secret,并且为其分配 AliyunDNSFullAccessAliyunDomainFullAccess权限

  • 编辑~/.acme.sh/account.conf文件,新增Ali_KeyAli_Secret的值

SAVED_Ali_Key='<Ali_Key>'
SAVED_Ali_Secret='<Ali_Secret>'
  • 生成证书,其中 leyla.top 为要生成证书的域名,*.leyla.top为其所有的二级域名
acme.sh --issue --dns dns_ali -d leyla.top -d *.leyla.top

注意:如果生成证书过程中报错了,请检查account.conf 文件中 Ali_KeyAli_Secret的值是否与在RAM中设置的一致、检查RAM中为该用户设置的权限是否正确;

3.安装证书

  • 默认生成的证书都放在 ~/.acme.sh/<DOMAIN>/ 目录下(如 leyla.top_ecc目录),使用 –install-cert 命令,证书将会复制到相应的位置,并重启Web服务。
acme.sh --install-cert -d leyla.top --key-file /etc/nginx/ssl/leyla.top.key --fullchain-file /etc/nginx/ssl/leyla.top.pem --reloadcmd "systemctl reload nginx.service"
  • /etc/nginx/ssl/ 为该服务器之前存储证书的目录
  • systemctl reload nginx.service 为重启nginx服务的命令

4. 检查是否生效

访问网站,检查证书的创建时间和过期时间。创建时间为生成证书的时间、过期时间为90天后。

Issued On Monday, February 10, 2025 at 8:00:00AM
Expires On Monday, May 12, 2025 at 7:59:59AM

参考地址: acme.sh/wiki/说明 ## Use Aliyun domain API to automatically issue cert